// главный скрипт

$(document).ready(main);

function main() {
    // главный метод, отвечает за начальную загрузку страницы
    $("#LogContainer").hide();
    $("#Autorization").hide();
    $("#Game_area").hide();
    $("#SendDataContainer").hide();
    $("#ChoiceType").hide();
    $("#ConnectGame").hide();
    $("#NewGame").hide();
    document.onkeydown = CheckKeyCode;
    
}

function init(){
    // стартовый метод при загрузке игровой области
    document.getElementById("chatBox").innerHTML = "";
    View_Map.init();
    Map.init();
    Gamer.init();
    Map.time = setInterval(Map.loadAll, 100);
}

function Log(Text, MessageType) {
    // отображение приходящих пакетов + информационная часть
    if (MessageType == "OK") Text = "<span style='color: green;'>" + Text + "</span>";
    if (MessageType == "ERROR") Text = "<span style='color: red;'>" + Text + "</span>";
    document.getElementById("LogContainer").innerHTML += Text + "<br />";
    var LogContainer = document.getElementById("LogContainer");
    LogContainer.scrollTop = LogContainer.scrollHeight;
}

function CheckKeyCode(event) {
    // обработчик нажатия клавиш клавиатуры
    var keyCode;
    if(event == null)
        keyCode = window.event.keyCode;
    else
        keyCode = event.keyCode;
    switch(keyCode) {
        case 71:
            if (View_Map.indFDote) goTo();
            break;
        default: break;
    }
}

function Go_Home() {
    // обработчик нажатия навигационной кнопки "home"
    $("#maincontent").show("slow");
    $("#intro").show("slow");
    $("#search").show("slow");
    $("#Autorization").hide("slow");
    $("#Game_area").hide();
    $("#ChoiceType").hide();
    $("#ConnectGame").hide();
    $("#NewGame").hide();
    $("#LogContainer").hide("slow");
    Web_Socket.final();
}

function Go_Autorization() {
    //  обработчик нажатия кнопки "авторизация" + проверка на поддержку web-сокетов браузером
    $("#Autorization").show("slow");
    $("#LogContainer").show();
    $("#maincontent").hide("slow");
    $("#search").hide("slow");
    $("#ChoiceType").hide();
    $("#SendDataContainer").hide();
    $("#Game_area").hide();
    $("#ConnectGame").hide();
    $("#NewGame").hide();
    $("#intro").hide();
    Web_Socket.final();
    if (document.getElementById("LogContainer").innerText) {
        document.getElementById("LogContainer").innerHTML = "";
    }
    var WebSocketsExist = true;		// web socket существует
    try {
        var tst = new WebSocket("ws://localhost:8181/test");
    } catch (ex) {
        WebSocketsExist = false;
    }
    if (WebSocketsExist) {
        Log("Ваш браузер поддерживает Websockets.", "OK");
        Web_Socket.name = "localhost:8181/test";
        document.getElementById("Connection").value = Web_Socket.name;
    } else {
        Log("Ваш браузер не поддерживает Websockets.", "ERROR");
        $("#ToConnect").hide();
    }
}

function ToggleConnectionClicked() {
    // обработчик кнопки "Подключиться" (id=ToggleConnection)
    if (document.getElementById("Connection").value != "") {
        Web_Socket.name = document.getElementById("Connection").value;
        if (Web_Socket.SocketCreated && (Web_Socket.ws.readyState == 0 || Web_Socket.ws.readyState == 1)) {
            Web_Socket.final();
        } else {
            Log("Соединение с сервером...");
            try {
                Web_Socket.ws = new WebSocket("ws://" + Web_Socket.name);
                Web_Socket.SocketCreated = true;
            } catch (ex) {
                Log(ex, "ERROR");
                return;
            }
            // привязка обработчиков к объекту web-сокета
            Web_Socket.ws.onopen = Web_Socket.opn;
            Web_Socket.ws.onmessage = Web_Socket.mes;
            Web_Socket.ws.onclose = Web_Socket.cls;
            Web_Socket.ws.onerror = Web_Socket.err;
        }
    } else if (document.getElementById("Connection").value == "")
        alert("Введите имя соединения!")
}

function SendDataClicked() {
    // обработчик кнопки "Войти" (id=SendData): отправка пакета с именем серверу
    if (document.getElementById("form-name").value != "") {
        Web_Socket.send(2,  document.getElementById("form-name").value);    // отправка пакета серверу
        Gamer.name = document.getElementById("form-name").value;
        document.getElementById("form-name").value = "";
    } else if (document.getElementById("form-name").value == "")
        alert('Необходимо ввести имя!');
}

function Choice() {
    // при выборе игры (после соединения с сервером)
    $("#Autorization").hide("slow");
    $("#ChoiceType").show("slow");
    document.getElementById("GameList").innerHTML = "";
    document.getElementById("SelectGame").innerHTML = "";
}

function Get_gamelist() {
    // получение всех доступных игр
    Web_Socket.send(4, null);   // отправка пакета серверу
}

function Game_Connect() {
    // подключение к выбранной игре, обработчик кнопки "Поехали! ("id="connect")
    Web_Socket.send(5, document.getElementById("SelectGame").value);    // отправка пакета серверу
}

function View_Choice_Game() {
    // отображение параметров выбранной игры
    $("#Game_area").show("slow");
    $("#Autorization").hide();
    $("#LogContainer").hide();
    $("#maincontent").hide();
    $("#search").hide();
    $("#ChoiceType").hide();
    $("#ConnectGame").hide();
    $("#NewGame").hide();
    $("#intro").hide();    
}

function Sent_Chat_Message() {
    // обработчик кнопки "Отправить" (id="btChatMes") - отправка сообщений в чат
    if (document.getElementById("chat_message").value != "") {
        Web_Socket.send(1, document.getElementById("chat_message").value);   // отправка пакета серверу
        document.getElementById("chat_message").value = "";
    }
}

function View_In_Chat(Text) {
    // отображение приходящих сообщений чата
    document.getElementById("chatBox").innerHTML += Text + "<br />";
    var LogContainer = document.getElementById("LogContainer");
    LogContainer.scrollTop = LogContainer.scrollHeight;
}

function Create_Game() {
    // обработчик кнопки "Создать" (id="new") - отображение параметров новой игры
    $("#NewGame").show("slow");
    $("#ChoiceType").hide("slow");
    $("#ChoiceTeam").hide();
    document.getElementById("txNewGameName").value = "";
}

function GetMapList() {
    // обработчик кнопки "Получить список карт" (id="btGetMapList")
    Web_Socket.send(6, null);     // отправка пакета серверу
}

function CreateNewGame() {
    // обработчик кнопки "Создать игру" (id="btCreateNewGame")
    if (document.getElementById("SelectMap").value) {
        if (document.getElementById("txNewGameName").value != "") {
            Web_Socket.send(3, document.getElementById("txNewGameName").value);
        } else if (document.getElementById("txNewGameName").value == "") alert("Необходимо ввести имя!");
    } else if (document.getElementById("SelectMap").value == "") alert("Необходимо выбрать карту!");
}

function NewGameCanBeCreated() {
    // проверка на создание новой игры; срабатывает при положительном ответе сервера пользователю
    Web_Socket.send(8, document.getElementById("txNewGameName").value, document.getElementById("SelectMap").value);
}

function MapChosen() {
    // проверка на выбор команды; срабатывает при положительном выборе карты
    Web_Socket.send(9, document.getElementById("txNewGameName").value, document.getElementById("SelectTeam").value);
}

function TeamChosen() {
    // проверка на начало новой игры; срабатывает при положительном выборе команды
    //Web_Socket.send(10, document.getElementById("txNewGameName").value);
    $("#Game_area").show("slow");
    $("#Autorization").hide();
    $("#LogContainer").hide();
    $("#maincontent").hide();
    $("#search").hide();
    $("#ChoiceType").hide();
    $("#ConnectGame").hide();
    $("#NewGame").hide();
    $("#intro").hide();
    init();
}